/*
 * Diccionario.h
 *
 *  Created on: 04/11/2010
 *      Author: julfc
 */

#ifndef DICCIONARIO_H_
#define DICCIONARIO_H_

#include <string>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <math.h>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <fstream>
#include <cstdlib>
#include <vector>
#include "PalabraPeso.h"
#include "ItemDiccionario.h"
#include "IdMailPeso.h"
#include "ModeloDocumento.h"
#include "PalabraPos.h"
#include "ModeloFrase.h"
#include "../moduloConsultas/Parser.h"
#include "../bsharptree/ArbolBSharp.h"
#include "../bsharptree/ArbolBSharpFrontCoding.h"
#include "../moduloAlmacenamiento/ManejadorListaPalabras.h"
#include "../clases/IdListaSingleton.h"
#include "../clases/IdListaDiccionario.h"

using namespace std;

class Diccionario {
private:
  bool leerStopWord(string &cadena, fstream &archivoStopWords);

public:
   	char archivoArbol[64];
	char archivoLista[64];
	char archivoNormas[64];

	Diccionario();
	ItemDiccionario obtenerVectorPalabrasMail(string cadena, long idMail);
	vector<string> obtenerStopWords();
	vector<string> obtenerStopCharacters();
	bool esStopWord(vector<string> stopWords, string palabra);
	unsigned int obtenerPosProximaPalabra(vector<string> palabras, int posActual);
	PalabraPeso crearPalabraPeso(vector<PalabraPos> palabras, int pos);
	bool insertarEnArbol(ItemDiccionario registro);
	vector<PalabraPos> splitSinStopWords(string str, string delimitador);
	string limpiarPalabra(string str);
	bool crearArchivos();
	long calcularNorma(ItemDiccionario item);
	vector<ModeloDocumento> buscarTerminos(vector<string> terminos);
	vector<ModeloDocumento> buscarTermino(string terminos);
	vector<ModeloDocumento> buscarFrase(vector<PalabraPos> terminos);
	vector<ModeloDocumento> refinarBusqueda(vector<ModeloFrase> terminos);
	bool contieneId(vector<ModeloDocumento> vect, ModeloDocumento modAnterior, long difPos);
	bool compararVectPos(vector<long> posAux ,	vector<long> posAnt, long difPos, long idMail);
	vector<ModeloDocumento> interserctarVectores(vector<ModeloDocumento> v1, vector<ModeloDocumento> v2);
	void imprimirModeloFrase(ModeloFrase mod);
	vector<PalabraPos> limpiarTerminos(vector<PalabraPos> terminos);
	double getPesoGlobal(long frecGlobal);
	vector<string> mostrarDiccionario();
	string limpiarSaltosDeLinea(string str);

	virtual ~Diccionario();
};

#endif /* DICCIONARIO_H_ */
